This disclosure relates to data processing and storage, and more specifically, to data protection techniques that combine error correcting code and redundant array of independent disk functionality for a non-volatile memory array.
As is known, most communication channels are subject to channel noise that may introduce errors in data during transmission of the data from a source to a receiver. Error detection and correction techniques facilitate reliable delivery of digital data over unreliable communication channels. Error detection and correction techniques also facilitate reliable storage of digital data in non-volatile memory (NVM) arrays. In sum, error detection techniques facilitate detecting data errors, while error correction techniques facilitate reconstruction of original data from corrupted data in many instances. An error-correcting code (ECC) is used for protecting a sequence of symbols such that errors introduced in the sequence of symbols can be detected and corrected (within limitations) based on symbols that are not corrupted. In general, error detection is less complex than error correction.
Reed-Solomon (RS) codes are linear block-based ECCs that have a wide range of applications in digital communications and storage. RS codes are commonly used to correct errors in many electronic systems and are a subset of Bose-Chaudhuri-Hocquenghem (BCH) codes. An RS encoder receives a digital data block and adds extra parity symbols. An RS decoder processes each noisy data block and attempts to correct errors and recover original data based on the redundancy given by the extra parity symbols. The number and type of errors that can be corrected with an RS code depends on the characteristics of an implemented RS code. An RS code over the finite field GF(2s) may be specified as RS(n, k) with s-bit symbols, which means that an RS encoder takes ‘k’ data symbols of ‘s’ bits each and adds symbols to make an ‘n’ symbol codeword, with ‘n-k’ added parity symbols of ‘s’ bits each. In general, an RS decoder can correct up to T symbols that contain errors in a codeword, where t is the largest integer not exceeding (n-k)/2.
A redundant array of independent disks (RAID) refers to a data storage technology that has been used to combine multiple hard disk drives (HDDs) or solid state drives (SSDs) into a single logical unit for the purposes of data redundancy and/or performance improvement. With RAID, data is distributed across drives in one of several ways, depending on the required level of redundancy and/or performance. Different RAID levels provide a different balance between capacity, performance, availability, and reliability. RAID levels greater than RAID ‘0’ provide protection against unrecoverable sector read errors, as well as against failures of whole drives.